package com.wl2o2o.lanqiao.xzfourteen;
/** 
* @author : WLei224
* @date ：2023年4月2日 上午9:26:46 
* 
*/
public class 质因子个数 {
	public static void main(String[] args) {
		System.out.println(num2(40));
		
		System.out.println(num(40));
		
	}
	
	
	//质因数个数
	public static int num(long n){
		int ans = 0;
		for(int i=2;i<n/i;i++){
			while(n%i==0){
//				System.out.print(i+" ");
				ans++;
				n/=i;
			}
		}
		if(n>1)ans++;
		return ans;
	}
	
	public static int num2(int n){
		int cnt = 1;//乘法初始值为1
		int bak = n;//备份n
		for(int i=2;i*i<bak;i++){
			int sum = 0;
			while(bak%i==0){
				sum++;
				bak = bak / i;
				
			}
			cnt = cnt * (sum + 1);
			System.out.printf("cnt = %d * (%d + 1)",cnt,sum);
			
			System.out.println();
		}
		if(bak>1) cnt*=2;
		return cnt;
	}
	//n阶乘的约数个数
	public static long num3(int n){
		int[] prime = new int[n+1];//prime[i]表示素数i这个因子出现的次数
		for(int i=2;i<=n;i++){
			int bak = i;
			for(int j=2;j*j<bak;j++){
				int sum = 0;
				while(bak%j==0){
					prime[j]++;
					bak = bak / j;
				}
			}
			if(bak>1) prime[bak]++;
		}
		long ans = 1;
		for(int i=2;i<=n;i++){
			if(prime[i]>1)
				ans = ans * (prime[i]+1);
		}
		return ans;
	}
}
